home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / zaccaria.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  23KB  |  675 lines

  1. /***************************************************************************
  2.  
  3. Jack Rabbit memory map (preliminary)
  4.  
  5. driver by Nicola Salmoria
  6.  
  7. 0000-5fff ROM
  8. 6000-63ff Video RAM
  9. 6400-67ff Color RAM
  10. 7000-77ff RAM
  11. 8000-dfff ROM
  12.  
  13. read:
  14. 6400-6406 protection
  15. 6c00-6c06 protection
  16. 6c00      COIN
  17. 6e00      dip switches (three ports multiplexed)
  18. 7800      IN0
  19. 7801      IN1
  20. 7802      IN2
  21. 7c00      watchdog reset?
  22.  
  23. write:
  24. 6800-683f even addresses = column [row] scroll; odd addresses = column [row] color?
  25. 6840-685f sprites
  26. 6881-68bc sprites
  27. 6c02      ?
  28. 6c07      NMI enable
  29. 7802      e0/d0/b0 select port which will appear at 6e00
  30.  
  31. ***************************************************************************/
  32.  
  33. #include "driver.h"
  34. #include "vidhrdw/generic.h"
  35. #include "machine/6821pia.h"
  36.  
  37.  
  38. extern unsigned char *zaccaria_attributesram;
  39.  
  40. void zaccaria_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  41. WRITE_HANDLER( zaccaria_attributes_w );
  42. void zaccaria_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  43.  
  44.  
  45. /* all connections unknown */
  46. static struct pia6821_interface pia_0_intf =
  47. {
  48.     /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
  49.     /*outputs: A/B,CA/B2       */ 0, 0, 0, 0,
  50.     /*irqs   : A/B             */ 0, 0
  51. };
  52.  
  53.  
  54. /* all connections unknown */
  55. static struct pia6821_interface pia_1_intf =
  56. {
  57.     /*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
  58.     /*outputs: A/B,CA/B2       */ 0, 0, 0, 0,
  59.     /*irqs   : A/B             */ 0, 0
  60. };
  61.  
  62.  
  63. static void zaccaria_init_machine(void)
  64. {
  65.     pia_unconfig();
  66.     pia_config(0, PIA_STANDARD_ORDERING | PIA_8BIT, &pia_0_intf);
  67.     pia_config(1, PIA_STANDARD_ORDERING | PIA_8BIT, &pia_1_intf);
  68.     pia_reset();
  69. }
  70.  
  71.  
  72.  
  73. struct GameDriver monymony_driver;
  74.  
  75. READ_HANDLER( zaccaria_prot1_r )
  76. {
  77.     switch (offset)
  78.     {
  79.         case 0:
  80.             return 0x50;    /* Money Money */
  81.  
  82.         case 4:
  83.             return 0x40;    /* Jack Rabbit */
  84.  
  85.         case 6:
  86.             if (Machine->gamedrv == &monymony_driver)
  87.                 return 0x70;    /* Money Money */
  88.             return 0xa0;    /* Jack Rabbit */
  89.  
  90.         default:
  91.             return 0;
  92.     }
  93. }
  94.  
  95. READ_HANDLER( zaccaria_prot2_r )
  96. {
  97.     switch (offset)
  98.     {
  99.         case 0:
  100.             return input_port_6_r(0);   /* bits 4 and 5 must be 0 in Jack Rabbit */
  101.  
  102.         case 2:
  103.             return 0x10;    /* Jack Rabbit */
  104.  
  105.         case 4:
  106.             return 0x80;    /* Money Money */
  107.  
  108.         case 6:
  109.             return 0x00;    /* Money Money */
  110.  
  111.         default:
  112.             return 0;
  113.     }
  114. }
  115.  
  116.  
  117. static int dsw;
  118.  
  119. WRITE_HANDLER( zaccaria_dsw_sel_w )
  120. {
  121.     switch (data)
  122.     {
  123.         case 0xe0:
  124.             dsw = 0;
  125.             break;
  126.  
  127.         case 0xd0:
  128.             dsw = 1;
  129.             break;
  130.  
  131.         case 0xb0:
  132.             dsw = 2;
  133.             break;
  134.  
  135.         default:
  136.             break;
  137. logerror("PC %04x: portsel = %02x\n",cpu_get_pc(),data);
  138.     }
  139. }
  140.  
  141. READ_HANDLER( zaccaria_dsw_r )
  142. {
  143.     return readinputport(dsw);
  144. }
  145.  
  146.  
  147.  
  148. static struct MemoryReadAddress readmem[] =
  149. {
  150.     { 0x0000, 0x5fff, MRA_ROM },
  151.     { 0x6000, 0x63ff, MRA_RAM },
  152.     { 0x6400, 0x6407, zaccaria_prot1_r },
  153.     { 0x6c00, 0x6c07, zaccaria_prot2_r },
  154.     { 0x6e00, 0x6e00, zaccaria_dsw_r },
  155.     { 0x7000, 0x77ff, MRA_RAM },
  156.     { 0x7800, 0x7800, input_port_3_r },
  157.     { 0x7801, 0x7801, input_port_4_r },
  158.     { 0x7802, 0x7802, input_port_5_r },
  159.     { 0x7c00, 0x7c00, watchdog_reset_r },   /* not sure */
  160.     { 0x8000, 0xdfff, MRA_ROM },
  161.     { -1 }  /* end of table */
  162. };
  163.  
  164. static struct MemoryWriteAddress writemem[] =
  165. {
  166.     { 0x0000, 0x5fff, MWA_ROM },
  167.     { 0x6000, 0x63ff, videoram_w, &videoram, &videoram_size },
  168.     { 0x6400, 0x67ff, colorram_w, &colorram },
  169.     { 0x6800, 0x683f, zaccaria_attributes_w, &zaccaria_attributesram },
  170.     { 0x6840, 0x685f, MWA_RAM, &spriteram, &spriteram_size },
  171.     { 0x6881, 0x68bc, MWA_RAM, &spriteram_2, &spriteram_2_size },
  172. { 0x6c02, 0x6c02, MWA_NOP },    /* ??? */
  173.     { 0x6c07, 0x6c07, interrupt_enable_w },
  174.     { 0x7000, 0x77ff, MWA_RAM },
  175.     { 0x7802, 0x7802, zaccaria_dsw_sel_w },
  176.     { 0x8000, 0xdfff, MWA_ROM },
  177.     { -1 }  /* end of table */
  178. };
  179.  
  180. static struct MemoryReadAddress sound_readmem1[] =
  181. {
  182.     { 0x0000, 0x007f, MRA_RAM },
  183.     { 0x500c, 0x500f, pia_0_r },
  184.     { 0xf000, 0xffff, MRA_ROM },
  185.     { -1 }  /* end of table */
  186. };
  187.  
  188. static struct MemoryWriteAddress sound_writemem1[] =
  189. {
  190.     { 0x0000, 0x007f, MWA_RAM },
  191.     { 0x500c, 0x500f, pia_0_w },
  192.     { 0xf000, 0xffff, MWA_ROM },
  193.     { -1 }  /* end of table */
  194. };
  195.  
  196. static struct MemoryReadAddress sound_readmem2[] =
  197. {
  198.     { 0x0000, 0x007f, MRA_RAM },
  199.     { 0x0090, 0x0093, pia_1_r },
  200.     { 0xe000, 0xffff, MRA_ROM },
  201.     { -1 }  /* end of table */
  202. };
  203.  
  204. static struct MemoryWriteAddress sound_writemem2[] =
  205. {
  206.     { 0x0000, 0x007f, MWA_RAM },
  207.     { 0x0090, 0x0093, pia_1_w },
  208.     { 0xe000, 0xffff, MWA_ROM },
  209.     { -1 }  /* end of table */
  210. };
  211.  
  212.  
  213.  
  214. INPUT_PORTS_START( monymony )
  215.     PORT_START
  216.     PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) )
  217.     PORT_DIPSETTING(    0x00, "2" )
  218.     PORT_DIPSETTING(    0x01, "3" )
  219.     PORT_DIPSETTING(    0x02, "4" )
  220.     PORT_DIPSETTING(    0x03, "5" )
  221.     PORT_BITX(    0x04, 0x00, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Lives", IP_KEY_NONE, IP_JOY_NONE )
  222.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  223.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  224.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Difficulty ) )
  225.     PORT_DIPSETTING(    0x00, "Easy" )
  226.     PORT_DIPSETTING(    0x08, "Hard" )
  227.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
  228.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  229.     PORT_DIPSETTING(    0x10, DEF_STR( Cocktail ) )
  230.     PORT_DIPNAME( 0x20, 0x00, "Freeze" )
  231.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  232.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  233.     PORT_DIPNAME( 0x40, 0x00, "Cross Hatch Pattern" )
  234.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  235.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  236.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )  /* random high scores? */
  237.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  238.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  239.  
  240.     PORT_START
  241.     PORT_DIPNAME( 0x03, 0x01, DEF_STR( Bonus_Life ) )
  242.     PORT_DIPSETTING(    0x01, "200000" )
  243.     PORT_DIPSETTING(    0x02, "300000" )
  244.     PORT_DIPSETTING(    0x03, "400000" )
  245.     PORT_DIPSETTING(    0x00, "None" )
  246.     PORT_DIPNAME( 0x04, 0x04, "Table Title" )
  247.     PORT_DIPSETTING(    0x04, "High Scores" )
  248.     PORT_DIPSETTING(    0x00, "Todays High Scores" )
  249.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  250.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  251.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  252.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
  253.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  254.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  255.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
  256.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  257.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  258.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  259.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  260.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  261.     PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
  262.  
  263.     PORT_START
  264.     PORT_DIPNAME( 0x03, 0x02, DEF_STR( Coin_A ) )
  265.     PORT_DIPSETTING(    0x03, DEF_STR( 2C_1C ) )
  266.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_1C ) )
  267.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
  268.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_3C ) )
  269.     PORT_DIPNAME( 0x8c, 0x84, DEF_STR( Coin_B ) )
  270.     PORT_DIPSETTING(    0x8c, DEF_STR( 4C_1C ) )
  271.     PORT_DIPSETTING(    0x88, DEF_STR( 2C_1C ) )
  272.     PORT_DIPSETTING(    0x84, DEF_STR( 1C_1C ) )
  273.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  274.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
  275.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_4C ) )
  276.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_5C ) )
  277.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )
  278.     PORT_DIPNAME( 0x70, 0x50, "Coin C" )
  279.     PORT_DIPSETTING(    0x70, DEF_STR( 4C_1C ) )
  280.     PORT_DIPSETTING(    0x60, DEF_STR( 2C_1C ) )
  281.     PORT_DIPSETTING(    0x50, DEF_STR( 1C_1C ) )
  282.     PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) )
  283.     PORT_DIPSETTING(    0x30, DEF_STR( 1C_3C ) )
  284.     PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) )
  285.     PORT_DIPSETTING(    0x10, DEF_STR( 1C_5C ) )
  286.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_7C ) )
  287.  
  288.     PORT_START
  289.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  290.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  291.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  292.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  293.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  294.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  295.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  296.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  297.  
  298.     PORT_START
  299.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  300.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  301.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  302.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  303.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  304.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  305.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  306.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  307.  
  308.     PORT_START
  309.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  310.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  311.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )   /* I think */
  312.     PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
  313.  
  314.     PORT_START
  315.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  316.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  317.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
  318.     PORT_BIT( 0x30, 0x00, IPT_UNKNOWN ) /* protection check in Jack Rabbit - must be 0 */
  319.     PORT_BIT( 0xc8, IP_ACTIVE_LOW, IPT_UNKNOWN )
  320. INPUT_PORTS_END
  321.  
  322. INPUT_PORTS_START( jackrabt )
  323.     PORT_START
  324.     PORT_DIPNAME( 0x03, 0x01, DEF_STR( Lives ) )
  325.     PORT_DIPSETTING(    0x00, "2" )
  326.     PORT_DIPSETTING(    0x01, "3" )
  327.     PORT_DIPSETTING(    0x02, "4" )
  328.     PORT_DIPSETTING(    0x03, "5" )
  329.     PORT_BITX(    0x04, 0x00, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Infinite Lives", IP_KEY_NONE, IP_JOY_NONE )
  330.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  331.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  332.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  333.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  334.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  335.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
  336.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  337.     PORT_DIPSETTING(    0x10, DEF_STR( Cocktail ) )
  338.     PORT_DIPNAME( 0x20, 0x00, "Freeze" )
  339.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  340.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  341.     PORT_DIPNAME( 0x40, 0x00, "Cross Hatch Pattern" )
  342.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  343.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  344.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
  345.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  346.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  347.  
  348.     PORT_START
  349.     PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
  350.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  351.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  352.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
  353.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  354.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  355.     PORT_DIPNAME( 0x04, 0x04, "Table Title" )
  356.     PORT_DIPSETTING(    0x04, "High Scores" )
  357.     PORT_DIPSETTING(    0x00, "Todays High Scores" )
  358.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  359.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  360.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  361.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
  362.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  363.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  364.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
  365.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  366.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  367.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  368.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  369.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  370.     PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
  371.  
  372.     PORT_START
  373.     PORT_DIPNAME( 0x03, 0x02, DEF_STR( Coin_A ) )
  374.     PORT_DIPSETTING(    0x03, DEF_STR( 2C_1C ) )
  375.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_1C ) )
  376.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
  377.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_3C ) )
  378.     PORT_DIPNAME( 0x8c, 0x84, DEF_STR( Coin_B ) )
  379.     PORT_DIPSETTING(    0x8c, DEF_STR( 4C_1C ) )
  380.     PORT_DIPSETTING(    0x88, DEF_STR( 2C_1C ) )
  381.     PORT_DIPSETTING(    0x84, DEF_STR( 1C_1C ) )
  382.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  383.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
  384.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_4C ) )
  385.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_5C ) )
  386.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )
  387.     PORT_DIPNAME( 0x70, 0x50, "Coin C" )
  388.     PORT_DIPSETTING(    0x70, DEF_STR( 4C_1C ) )
  389.     PORT_DIPSETTING(    0x60, DEF_STR( 2C_1C ) )
  390.     PORT_DIPSETTING(    0x50, DEF_STR( 1C_1C ) )
  391.     PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) )
  392.     PORT_DIPSETTING(    0x30, DEF_STR( 1C_3C ) )
  393.     PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) )
  394.     PORT_DIPSETTING(    0x10, DEF_STR( 1C_5C ) )
  395.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_7C ) )
  396.  
  397.     PORT_START
  398.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
  399.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  400.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  401.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  402.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  403.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
  404.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
  405.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  406.  
  407.     PORT_START
  408.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  409.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  410.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  411.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  412.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  413.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  414.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  415.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  416.  
  417.     PORT_START
  418.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  419.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  420.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_TILT )   /* I think */
  421.     PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN )
  422.  
  423.     PORT_START
  424.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
  425.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
  426.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
  427.     PORT_BIT( 0x30, 0x00, IPT_UNKNOWN ) /* protection check in Jack Rabbit - must be 0 */
  428.     PORT_BIT( 0xc8, IP_ACTIVE_LOW, IPT_UNKNOWN )
  429. INPUT_PORTS_END
  430.  
  431.  
  432.  
  433. static struct GfxLayout charlayout =
  434. {
  435.     8,8,    /* 8*8 characters */
  436.     1024,   /* 1024 characters */
  437.     3,  /* 3 bits per pixel */
  438.     { 2*1024*8*8, 1*1024*8*8, 0*1024*8*8},
  439.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  440.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  441.     8*8 /* every char takes 8 consecutive bytes */
  442. };
  443.  
  444. static struct GfxLayout spritelayout =
  445. {
  446.     16,16,  /* 16*16 sprites */
  447.     256,    /* 256 sprites */
  448.     3,  /* 3 bits per pixel */
  449.     { 2*1024*8*8, 1*1024*8*8, 0*1024*8*8},
  450.     { 0, 1, 2, 3, 4, 5, 6, 7,
  451.             8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
  452.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  453.             16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
  454.     32*8    /* every sprite takes 32 consecutive bytes */
  455. };
  456.  
  457. static struct GfxDecodeInfo gfxdecodeinfo[] =
  458. {
  459.     { REGION_GFX1, 0, &charlayout,      0, 32 },
  460.     { REGION_GFX1, 0, &spritelayout, 32*8, 32 },
  461.     { -1 } /* end of array */
  462. };
  463.  
  464.  
  465.  
  466. static struct MachineDriver machine_driver_zaccaria =
  467. {
  468.     /* basic machine hardware */
  469.     {
  470.         {
  471.             CPU_Z80,
  472.             3000000,    /* 3 Mhz ????? */
  473.             readmem,writemem,0,0,
  474.             nmi_interrupt,1
  475.         },
  476.         {
  477.             CPU_M6802 | CPU_AUDIO_CPU,
  478.             6000000/4,  /* ????? */
  479.             sound_readmem1,sound_writemem1,0,0,
  480.             ignore_interrupt,1
  481.         },
  482.         {
  483.             CPU_M6802 | CPU_AUDIO_CPU,
  484.             6000000/4,  /* ????? */
  485.             sound_readmem2,sound_writemem2,0,0,
  486.             ignore_interrupt,1
  487.         }
  488.     },
  489.     60, DEFAULT_60HZ_VBLANK_DURATION,   /* frames per second, vblank duration */
  490.     1,  /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  491.     zaccaria_init_machine,
  492.  
  493.     /* video hardware */
  494.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  495.     gfxdecodeinfo,
  496.     512, 32*8+32*8,
  497.     zaccaria_vh_convert_color_prom,
  498.  
  499.     VIDEO_TYPE_RASTER,
  500.     0,
  501.     generic_vh_start,
  502.     generic_vh_stop,
  503.     zaccaria_vh_screenrefresh,
  504.  
  505.     /* sound hardware */
  506.     0,0,0,0,
  507. };
  508.  
  509.  
  510.  
  511. /***************************************************************************
  512.  
  513.   Game driver(s)
  514.  
  515. ***************************************************************************/
  516.  
  517. ROM_START( monymony )
  518.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  519.     ROM_LOAD( "1a",           0x0000, 0x1000, 0x13c227ca )
  520.     ROM_CONTINUE(             0x8000, 0x1000 )
  521.     ROM_LOAD( "1b",           0x1000, 0x1000, 0x87372545 )
  522.     ROM_CONTINUE(             0x9000, 0x1000 )
  523.     ROM_LOAD( "1c",           0x2000, 0x1000, 0x6aea9c01 )
  524.     ROM_CONTINUE(             0xa000, 0x1000 )
  525.     ROM_LOAD( "1d",           0x3000, 0x1000, 0x5fdec451 )
  526.     ROM_CONTINUE(             0xb000, 0x1000 )
  527.     ROM_LOAD( "2a",           0x4000, 0x1000, 0xaf830e3c )
  528.     ROM_CONTINUE(             0xc000, 0x1000 )
  529.     ROM_LOAD( "2c",           0x5000, 0x1000, 0x31da62b1 )
  530.     ROM_CONTINUE(             0xd000, 0x1000 )
  531.  
  532.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for first 6802 */
  533.     ROM_LOAD( "1i",           0x7000, 0x1000, 0x94e3858b )  /* ?? */
  534.     ROM_CONTINUE(             0xf000, 0x1000 )
  535.  
  536.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for second 6802 */
  537.     ROM_LOAD( "1h",           0x6000, 0x1000, 0xaad76193 )  /* ?? */
  538.     ROM_CONTINUE(             0xe000, 0x1000 )
  539.     ROM_LOAD( "1g",           0x7000, 0x1000, 0x1e8ffe3e )  /* ?? */
  540.     ROM_CONTINUE(             0xf000, 0x1000 )
  541.  
  542.     ROM_REGION( 0x6000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  543.     ROM_LOAD( "2d",           0x0000, 0x2000, 0x82ab4d1a )
  544.     ROM_LOAD( "1f",           0x2000, 0x2000, 0x40d4e4d1 )
  545.     ROM_LOAD( "1e",           0x4000, 0x2000, 0x36980455 )
  546.  
  547.     ROM_REGION( 0x0400, REGION_PROMS )
  548.     ROM_LOAD( "monymony.9g",  0x0000, 0x0200, 0xfc9a0f21 )
  549.     ROM_LOAD( "monymony.9f",  0x0200, 0x0200, 0x93106704 )
  550.  
  551.     ROM_REGION( 0x2000, REGION_SOUND1 )    /* TMS5200 sample data??? */
  552.     ROM_LOAD( "2g",           0x0000, 0x2000, 0x78b01b98 )
  553. ROM_END
  554.  
  555. ROM_START( jackrabt )
  556.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  557.     ROM_LOAD( "cpu-01.1a",    0x0000, 0x1000, 0x499efe97 )
  558.     ROM_CONTINUE(             0x8000, 0x1000 )
  559.     ROM_LOAD( "cpu-01.2l",    0x1000, 0x1000, 0x4772e557 )
  560.     ROM_LOAD( "cpu-01.3l",    0x2000, 0x1000, 0x1e844228 )
  561.     ROM_LOAD( "cpu-01.4l",    0x3000, 0x1000, 0xebffcc38 )
  562.     ROM_LOAD( "cpu-01.5l",    0x4000, 0x1000, 0x275e0ed6 )
  563.     ROM_LOAD( "cpu-01.6l",    0x5000, 0x1000, 0x8a20977a )
  564.     ROM_LOAD( "cpu-01.2h",    0x9000, 0x1000, 0x21f2be2a )
  565.     ROM_LOAD( "cpu-01.3h",    0xa000, 0x1000, 0x59077027 )
  566.     ROM_LOAD( "cpu-01.4h",    0xb000, 0x1000, 0x0b9db007 )
  567.     ROM_LOAD( "cpu-01.5h",    0xc000, 0x1000, 0x785e1a01 )
  568.     ROM_LOAD( "cpu-01.6h",    0xd000, 0x1000, 0xdd5979cf )
  569.  
  570.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for first 6802 */
  571.     ROM_LOAD( "9snd.1i",      0x7000, 0x1000, 0x3dab977f )  /* ?? */
  572.     ROM_CONTINUE(             0xf000, 0x1000 )
  573.  
  574.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for second 6802 */
  575.     ROM_LOAD( "8snd.1h",      0x6000, 0x1000, 0xf4507111 )  /* ?? */
  576.     ROM_CONTINUE(             0xe000, 0x1000 )
  577.     ROM_LOAD( "7snd.1g",      0x7000, 0x1000, 0xc722eff8 )  /* ?? */
  578.     ROM_CONTINUE(             0xf000, 0x1000 )
  579.  
  580.     ROM_REGION( 0x6000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  581.     ROM_LOAD( "1bg.2d",       0x0000, 0x2000, 0x9f880ef5 )
  582.     ROM_LOAD( "2bg.1f",       0x2000, 0x2000, 0xafc04cd7 )
  583.     ROM_LOAD( "3bg.1e",       0x4000, 0x2000, 0x14f23cdd )
  584.  
  585.     ROM_REGION( 0x0400, REGION_PROMS )
  586.     ROM_LOAD( "jr-ic9g",      0x0000, 0x0200, 0x85577107 )
  587.     ROM_LOAD( "jr-ic9f",      0x0200, 0x0200, 0x085914d1 )
  588.  
  589.     ROM_REGION( 0x2000, REGION_SOUND1 )    /* TMS5200 sample data??? */
  590.     ROM_LOAD( "13snd.2g",     0x0000, 0x2000, 0xfc05654e )
  591. ROM_END
  592.  
  593. ROM_START( jackrab2 )
  594.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  595.     ROM_LOAD( "1cpu2.1a",     0x0000, 0x1000, 0xf9374113 )
  596.     ROM_CONTINUE(             0x8000, 0x1000 )
  597.     ROM_LOAD( "2cpu2.1b",     0x1000, 0x1000, 0x0a0eea4a )
  598.     ROM_CONTINUE(             0x9000, 0x1000 )
  599.     ROM_LOAD( "3cpu2.1c",     0x2000, 0x1000, 0x291f5772 )
  600.     ROM_CONTINUE(             0xa000, 0x1000 )
  601.     ROM_LOAD( "4cpu2.1d",     0x3000, 0x1000, 0x10972cfb )
  602.     ROM_CONTINUE(             0xb000, 0x1000 )
  603.     ROM_LOAD( "5cpu2.2a",     0x4000, 0x1000, 0xaa95d06d )
  604.     ROM_CONTINUE(             0xc000, 0x1000 )
  605.     ROM_LOAD( "6cpu2.2c",     0x5000, 0x1000, 0x404496eb )
  606.     ROM_CONTINUE(             0xd000, 0x1000 )
  607.  
  608.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for first 6802 */
  609.     ROM_LOAD( "9snd.1i",      0x7000, 0x1000, 0x3dab977f )  /* ?? */
  610.     ROM_CONTINUE(             0xf000, 0x1000 )
  611.  
  612.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for second 6802 */
  613.     ROM_LOAD( "8snd.1h",      0x6000, 0x1000, 0xf4507111 )  /* ?? */
  614.     ROM_CONTINUE(             0xe000, 0x1000 )
  615.     ROM_LOAD( "7snd.1g",      0x7000, 0x1000, 0xc722eff8 )  /* ?? */
  616.     ROM_CONTINUE(             0xf000, 0x1000 )
  617.  
  618.     ROM_REGION( 0x6000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  619.     ROM_LOAD( "1bg.2d",       0x0000, 0x2000, 0x9f880ef5 )
  620.     ROM_LOAD( "2bg.1f",       0x2000, 0x2000, 0xafc04cd7 )
  621.     ROM_LOAD( "3bg.1e",       0x4000, 0x2000, 0x14f23cdd )
  622.  
  623.     ROM_REGION( 0x0400, REGION_PROMS )
  624.     ROM_LOAD( "jr-ic9g",      0x0000, 0x0200, 0x85577107 )
  625.     ROM_LOAD( "jr-ic9f",      0x0200, 0x0200, 0x085914d1 )
  626.  
  627.     ROM_REGION( 0x2000, REGION_SOUND1 )    /* TMS5200 sample data??? */
  628.     ROM_LOAD( "13snd.2g",     0x0000, 0x2000, 0xfc05654e )
  629. ROM_END
  630.  
  631. ROM_START( jackrabs )
  632.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  633.     ROM_LOAD( "1cpu.1a",      0x0000, 0x1000, 0x6698dc65 )
  634.     ROM_CONTINUE(             0x8000, 0x1000 )
  635.     ROM_LOAD( "2cpu.1b",      0x1000, 0x1000, 0x42b32929 )
  636.     ROM_CONTINUE(             0x9000, 0x1000 )
  637.     ROM_LOAD( "3cpu.1c",      0x2000, 0x1000, 0x89b50c9a )
  638.     ROM_CONTINUE(             0xa000, 0x1000 )
  639.     ROM_LOAD( "4cpu.1d",      0x3000, 0x1000, 0xd5520665 )
  640.     ROM_CONTINUE(             0xb000, 0x1000 )
  641.     ROM_LOAD( "5cpu.2a",      0x4000, 0x1000, 0x0f9a093c )
  642.     ROM_CONTINUE(             0xc000, 0x1000 )
  643.     ROM_LOAD( "6cpu.2c",      0x5000, 0x1000, 0xf53d6356 )
  644.     ROM_CONTINUE(             0xd000, 0x1000 )
  645.  
  646.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for first 6802 */
  647.     ROM_LOAD( "9snd.1i",      0x7000, 0x1000, 0x3dab977f )  /* ?? */
  648.     ROM_CONTINUE(             0xf000, 0x1000 )
  649.  
  650.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for second 6802 */
  651.     ROM_LOAD( "8snd.1h",      0x6000, 0x1000, 0xf4507111 )  /* ?? */
  652.     ROM_CONTINUE(             0xe000, 0x1000 )
  653.     ROM_LOAD( "7snd.1g",      0x7000, 0x1000, 0xc722eff8 )  /* ?? */
  654.     ROM_CONTINUE(             0xf000, 0x1000 )
  655.  
  656.     ROM_REGION( 0x6000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  657.     ROM_LOAD( "1bg.2d",       0x0000, 0x2000, 0x9f880ef5 )
  658.     ROM_LOAD( "2bg.1f",       0x2000, 0x2000, 0xafc04cd7 )
  659.     ROM_LOAD( "3bg.1e",       0x4000, 0x2000, 0x14f23cdd )
  660.  
  661.     ROM_REGION( 0x0400, REGION_PROMS )
  662.     ROM_LOAD( "jr-ic9g",      0x0000, 0x0200, 0x85577107 )
  663.     ROM_LOAD( "jr-ic9f",      0x0200, 0x0200, 0x085914d1 )
  664.  
  665.     ROM_REGION( 0x2000, REGION_SOUND1 )    /* TMS5200 sample data??? */
  666.     ROM_LOAD( "13snd.2g",     0x0000, 0x2000, 0xfc05654e )
  667. ROM_END
  668.  
  669.  
  670.  
  671. GAMEX( 1983, monymony, 0,        zaccaria, monymony, 0, ROT90, "Zaccaria", "Money Money", GAME_NO_SOUND | GAME_NO_COCKTAIL )
  672. GAMEX( 1984, jackrabt, 0,        zaccaria, jackrabt, 0, ROT90, "Zaccaria", "Jack Rabbit (set 1)", GAME_NO_SOUND | GAME_NO_COCKTAIL )
  673. GAMEX( 1984, jackrab2, jackrabt, zaccaria, jackrabt, 0, ROT90, "Zaccaria", "Jack Rabbit (set 2)", GAME_NO_SOUND | GAME_NO_COCKTAIL )
  674. GAMEX( 1984, jackrabs, jackrabt, zaccaria, jackrabt, 0, ROT90, "Zaccaria", "Jack Rabbit (special)", GAME_NO_SOUND | GAME_NO_COCKTAIL )
  675.